#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_mainwindow.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindowClass; };
QT_END_NAMESPACE


/**
 * @brief 不同信息对应的行号
*/
namespace column_number
{
    constexpr int name = 0;
    constexpr int sex = 1;
    constexpr int birth = 2;
    constexpr int nation = 3;
    constexpr int score = 4;
    constexpr int party = 5;
};

/**
 * @brief 自定义格子类型枚举
*/
namespace cell_type
{
    constexpr int name = 1000;
    constexpr int sex = 1001;
    constexpr int birth = 1002;
    constexpr int nation = 1003;
    constexpr int score = 1004;
    constexpr int party = 1005;
};

class QLabel;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindowClass *ui;

private:
    /**
     * @brief 创建一行
     * @param rowNo 行号
     * @param Name 姓名
     * @param sex 性别
     * @param birth 生日
     * @param nation 民族
     * @param isPM 是否是党员
     * @param score 得分
    */
    void creatIteamsARow(int rowNo, QString Name, QString sex, QDate birth, QString nation, bool isPM, int score);

private:
    QLabel* label_cell_index = nullptr;//显示索引的标签
    QLabel* label_cell_type = nullptr;//显示类型的标签
    QLabel* label_student_id = nullptr;//显示学号的标签


//信号对应的槽函数
private slots:    
    /**
     * @brief 设置水平表头
    */
    void on_pushButton_SetHeader_clicked();

    /**
     * @brief 设置行数
    */
    void on_pushButton_SetRows_clicked();

    /**
     * @brief 初始化数据
    */
    void on_pushButton_InitData_clicked();

    /**
     * @brief 插入一行
    */
    void on_pushButton_InsertRow_clicked();

    /**
     * @brief 添加一行
    */
    void on_pushButton_AppendRow_clicked();

    /**
     * @brief 删除行
    */
    void on_pushButton_DeleteCurrentRow_clicked();

    /**
     * @brief 调节高度
    */
    void on_pushButton_AutoHeight_clicked();

    /**
     * @brief 调节宽度
    */
    void on_pushButton_AutoWidth_clicked();

    /**
     * @brief 读取表格内容
    */
    void on_pushButton_ReadToEdit_clicked();

    /**
     * @brief 是否可编辑
     * @param checked 
    */
    void on_checkBox_Editable_clicked(bool checked);

    /**
     * @brief 间隔行底色
     * @param checked 
    */
    void on_checkBox_RowColors_clicked(bool checked);

    /**
     * @brief 显示水平表头
     * @param checked 
    */
    void on_checkBox_HorizontalHeader_clicked(bool checked);

    /**
     * @brief 显示垂直表头
     * @param checked 
    */
    void on_checkBox_VerticalHeader_clicked(bool checked);

    /**
     * @brief 行选择
    */
    void on_radioButton_SelectRow_clicked();

    /**
     * @brief 单元格选择
    */
    void on_radioButton_SelectItem_clicked();

    /**
     * @brief 表格选择改变
    */
    void on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
};
